package com.mazaiting.redeye.module.msg.single

import android.text.SpannedString
import cn.jpush.im.android.api.content.TextContent
import cn.jpush.im.android.api.enums.ContentType
import cn.jpush.im.android.api.model.Message
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mazaiting.emotion.util.EmotionUtil
import com.mazaiting.emotion.util.SpanStringUtil
import com.mazaiting.log.L
import com.mazaiting.redeye.R

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-07-29
 * @description 单聊适配器
 */
class SingleAdapter constructor(data: List<SingleEntity>): BaseMultiItemQuickAdapter<SingleEntity, BaseViewHolder>(data) {
    init {
        // 添加类型与视图
        addItemType(SingleEntity.TYPE_NOT_ME, R.layout.item_single_not_me)
        addItemType(SingleEntity.TYPE_ME, R.layout.item_single_me)
    }

    override fun convert(helper: BaseViewHolder?, item: SingleEntity?) {
        // 判断类型
        when (item?.itemType) {
            SingleEntity.TYPE_NOT_ME -> setNotMe(helper, item.getMessage())
            SingleEntity.TYPE_ME -> setMe(helper, item.getMessage())
        }
    }

    /**
     * 设置其他人发送来的消息
     * @param helper 帮助工具类
     * @param message 消息实体
     */
    private fun setMe(helper: BaseViewHolder?, message: Message) {
        // 用户名
        helper?.setText(R.id.item_username, message.fromUser?.userName)

        // 判断内容类型
        if (ContentType.text == message.contentType) {
            // 消息内容
            val msgContent = message.content as TextContent
            // 内容
            val content = msgContent.text
            // 内容
            // helper?.setText(R.id.item_content, content)
            // 设置表情
            helper?.setText(R.id.item_content,
                SpanStringUtil
                    .getEmotionContent(
                        mContext,
                        EmotionUtil.EMOTION_CLASSIC_TYPE,
                        helper.getView(R.id.item_content),
                        content
                    ))
        }
    }

    /**
     * 设置其他人发送来的消息
     * @param helper 帮助工具类
     * @param message 消息实体
     */
    private fun setNotMe(helper: BaseViewHolder?, message: Message) {
        // 用户名
        helper?.setText(R.id.item_username, message.fromUser?.userName)

        // 判断内容类型
        if (ContentType.text == message.contentType) {
            // 消息内容
            val msgContent = message.content as TextContent
            // 内容
            val content = msgContent.text
            // 内容
            // helper?.setText(R.id.item_content, content)
            // 设置表情
            helper?.setText(R.id.item_content,
                SpanStringUtil
                    .getEmotionContent(
                        mContext,
                        EmotionUtil.EMOTION_CLASSIC_TYPE,
                        helper.getView(R.id.item_content),
                        content
                    ))
        }
    }

    override fun getItemId(position: Int): Long = position.toLong()

}